package br.com.lab.controller.servlets;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanArrayDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.view.JasperViewer;
import br.com.lab.bean.Produto;
import br.com.lab.controller.ProdutoController;

@WebServlet("/ListaProdutoServlet")
public class ListaProdutoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public ListaProdutoServlet() {
        // TODO Auto-generated constructor stub
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		try{
		
		ProdutoController produtoController = new ProdutoController();
		
		List<Produto> listaProduto = produtoController.listaProdutos();
		
		InputStream path = getClass().getResourceAsStream("../reports/ListaProdutoReport.jasper");
		
		JRBeanCollectionDataSource jrBeanCollectionDataSource = new JRBeanCollectionDataSource(listaProduto);
		
		JasperPrint jasperPrint = JasperFillManager.fillReport("../reports/ListaProdutoReport.jasper", null, jrBeanCollectionDataSource);
		
		JRXlsxExporter jrXlsxExporter = new JRXlsxExporter();
		
		jrXlsxExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		jrXlsxExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, os);
		jrXlsxExporter.exportReport();
		
		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		
		response.setHeader("Content-Disposition", "attachment;filename=example.xlsx");
		
		response.getOutputStream().write(os.toByteArray());
		
		response.flushBuffer();
		
		/*
		
		JasperViewer jasperViewer = new JasperViewer(jasperPrint);
		
		jasperViewer.setVisible(true);
		
		*/
		
		}
		catch (Exception e){
			e.printStackTrace();
		}
		
		//printHtml(request, response, listaProduto);
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}
	
	private void printHtml(HttpServletRequest request, HttpServletResponse response, List<Produto> listaProduto) throws ServletException, IOException{
		
		PrintWriter print = response.getWriter();
		print.append("<h1>Lista de Produtos</h1>");
		print.append("<table border = 1>");
		print.append("<tr>");
		print.append("<td>Codigo Produto</td>");
		print.append("<td>Nome</td>");
		print.append("<td>Codigo Fabricante</td>");
		print.append("</tr>");
		for (Produto produto : listaProduto){
			print.append("<tr>");
			print.append("<td>"+produto.getCodProduto()+"</td>");
			print.append("<td>"+produto.getNome()+"</td>");
			print.append("<td>"+produto.getCodFabricante()+"</td>");
			print.append("</tr>");
		}
		print.append("</table>");
		
		
		
	}
}
